package xx.services.util.img;



import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;

/**
 * 目录系统支持的图片类型（JEPG,PNG,GIF,BMP）<br>
 * 当上传的图片为CMYK时，浏览器不支持，也就是说不显示出来。
 * 
 * @author chenx,2009-5-22 $LastChangedDate$ $Author$
 */
public final class ImageType
{
    /** 未知图片类型 */
    public final static int NONE = -1;

    /** JPEG图片类型 */
    public final static int JPEG = 1;

    /** PNG图片类型 */
    public final static int PNG = 2;

    /** GIF图片类型 */
    public final static int GIF = 3;

    /** BMP图片类型 */
    public final static int BMP = 4;

    /**
     * 判断是否是图片类型
     * 
     * @param is
     *            文件流
     * @return true:图片类型，false:不是图片类型
     * @author chenx,2009-5-22
     */
    public final static boolean isImageType(final InputStream is)
    {
        int type = getType(is);
        return type > 0;
    }

    /**
     * 获取图片类型
     * 
     * @param path
     *            文件地址
     * @return NONE/JPG/PNG/GIF/BMP对应的int值，大于0时，表示图片类型
     * @author chenx,2009-5-22
     */
    public final static int getType(final String path)
    {
        File file = new File(path);
        try
        {
            return getType((InputStream) new FileInputStream(file));
        }
        catch (FileNotFoundException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return NONE;
    }

    /**
     * 获取图片类型
     * 
     * @param is
     *            文件流
     * @return NONE/JPG/PNG/GIF/BMP对应的int值，大于0时，表示图片类型
     * @author chenx,2009-5-22
     */
    public final static int getType(final InputStream is)
    {
        try
        {
            ImageInputStream iis = ImageIO.createImageInputStream(is);
            Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);

            if (!iter.hasNext())
            {
                // No readers found
                return NONE;
            }

            // Use the first reader
            ImageReader reader = iter.next();

            // Close stream
            iis.close();

            // Return the format name
            String type = reader.getFormatName();
            if (type == null)
            {
                return NONE;
            }
            else
            {
                type = type.toLowerCase().trim();
                if ("bmp".equals(type))
                {
                    return BMP;
                }
                else if ("gif".equals(type))
                {
                    return GIF;
                }
                else if ("png".equals(type))
                {
                    return PNG;
                }
                else if ("jpg".equals(type) || "jpeg".equals(type))
                {
                    return JPEG;
                }
                else
                {
                    return NONE;
                }
            }
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            // e.printStackTrace();
        }
        return NONE;
    }
    
    public final static void convertCMYK(double rate){
//        Graphics g = null; 
    }
}
